package com.atguigu.advanced.pool;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;

import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

/**
 * @author lhl
 * @date 2025/4/16 15:47
 */
public class HikariTest {

    @Test
    public void testHardCodeHikari() throws Exception{
        /**
         * 硬编码:将连接池的配置信息和Jova代码耦合在一起。
         * 1、创建HikariDataSource连接池对象，
         * 2、设置连接油的配置信息【必须|非必须]
         * 3、通过连接池获取连接对象
         * 4、回收连接【不是释放连接，而是将连接归还给连接池，给其他线程进行复用]
         */

        //1、创建HikariDataSource连接池对象，
        HikariDataSource hikariDataSource = new HikariDataSource();

        //2、设置连接油的配置信息【必须|非必须]
        //2.1必须配置信息
        hikariDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        hikariDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/atguigu");
        hikariDataSource.setUsername("root");
        hikariDataSource.setPassword("123456");

        //2.2非必须配置信息
        hikariDataSource.setMinimumIdle(10);
        hikariDataSource.setMaximumPoolSize(20);

        //3、通过连接池获取连接对象
        Connection connection = hikariDataSource.getConnection();
        System.out.println(connection);


        //4.回收链接
        connection.close();
    }

    @Test
    public void testResourcesHikari() throws Exception{
        //1,创建Properties集合，用于存储外部配置文件的key和value值.'
        Properties properties = new Properties();

        //2，读取外部配置文件，获取输入流，加载到Properties集合里。
        InputStream inputStream = DruidTest.class.getClassLoader().getResourceAsStream("hikari.properties");
        properties.load(inputStream);

        //3.创建HikariConfig连接池配置对象，将Properties集合集合传进去
        HikariConfig hikariConfig = new HikariConfig(properties);

        //4,基于HikariConfig连接池配置对象，构建HikariDataSource
        HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);

        //5.通过连接池获取连接对象
        Connection connection = hikariDataSource.getConnection();
        System.out.println(connection);

        //6.开发CRUD

        //7.回收连
        connection.close();
    }
}
